﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Web.Security;
using SuperStar.Models;

namespace SuperStar.Areas.Admincp.Controllers
{
    [Authorize(Roles = "Administrator, Reseller")]
    public class ResellerController : Controller
    {
        private readonly ResellerModels _resellerModels = new ResellerModels();
        private readonly StatusSellingModels _statusSellingModels = new StatusSellingModels();
        private readonly BillDetailModels _billDetailModels = new BillDetailModels();
        //
        // GET: /Admincp/Reseller/


        public ActionResult Index()
        {
            var listMonths = new Dictionary<int, string>
                                 {
                                     {0, "Chờ khách nhận hàng"},
                                     {1, "1 tháng trước"},
                                     {2, "2 tháng trước"},
                                     {3, "3 tháng trước"},
                                     {6, "6 tháng trước"},
                                     {12, "1 năm trước"},
                                     {120, "Tất cả"}
                                 };
            var listStatus = new Dictionary<int, string>
                                 {
                                     {3, "Chờ nhận hàng"},
                                     {4, "Đã nhận hàng"},
                                     {5, "Không đến nhận hàng"}
                                 };
            var resellers = _resellerModels.GetResellers();
            ViewData["listMonths"] = listMonths;
            ViewData["listStatus"] = listStatus;
            ViewData["resellers"] = resellers;
            ViewData["reseller"] =  (object) Request.Params["reseller"] ?? resellers[0].Id;
            ViewData["status"] = (object) Request.Params["status"] ?? 3;
            ViewData["month"] = (object) Request.Params["month"] ?? 1;
            return View();
        }

        public ActionResult GetStatus()
        {
            try
            {
                var statusSelling = _statusSellingModels.GetStatusForReseller();
                // Trả về đúng format gồm Result, Options cho jTable hiển thị                                    
                var result = new
                {
                    Result = "OK",
                    Options = statusSelling
                };
                return Json(result, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }
        }

        public ActionResult GetListDetailBill(int billId)
        {
            try
            {
                var productPromotions = _billDetailModels.GetBillDetailOfBill(billId)
                               .Select(p => new
                               {
                                   Id = p.Id,
                                   Name = p.ProductPromotion.Name,
                                   p.Quantity
                               });
                var result = new
                {
                    Result = "OK",
                    Records = productPromotions
                };

                return Json(result, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }
        }

        public ActionResult GetLists(int status, int month, 
                                     int jtStartIndex = 0, int jtPageSize = 0)
        {
            try
            {
                var resellerId = Roles.IsUserInRole("Administrator") ?
                    Convert.ToInt32(Request.Params["reseller"]) :
                    _resellerModels.GetResellerIdOfUsername(User.Identity.Name).Id;

                var count = _resellerModels.GetCountBillsOfReseller(resellerId,
                                                    status, month);
                var bills = _resellerModels.GetBillsOfReseller(resellerId,
                                                     status, month, jtStartIndex, jtPageSize);

                // Trả về đúng format gồm Result, Records, TotalRecordCount cho jTable hiển thị
                var result = new
                {
                    Result = "OK",
                    Records = bills,
                    TotalRecordCount = count
                };

                return Json(result, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }
        }

        public ActionResult Update(int Id, int Status_Id)
        {
            object result;
            try
            {
                if (_resellerModels.UpdateStatusBill(Id,Status_Id))
                    result = new { Result = "OK" };
                else
                    result = new { Result = "ERROR", Message = "Có lỗi trong quá trình cập nhật: <br/>" };

            }
            catch (Exception ex)
            {
                result = new { Result = "ERROR", Message = ex.Message + ex.InnerException };
            }
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    }
}
